package chixing.day20.class23;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class MyCglibProxy implements MethodInterceptor {  //方法拦截器
    private Object target;
    public MyCglibProxy(Object target){
        this.target = target;
    }
    public Object getProxyInstance(){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(this.target.getClass());
        // target: 目标对象 父类 ， enhancer: 代理对象子类
        enhancer.setCallback(this);
        return   enhancer.create();
    }


    /**
     obj : 被代理的对象（需要增强的对象）
     method : 被拦截的方法（需要增强的方法）
     args : 方法入参
     proxy : 用于调用原始方法
     */

    @Override
    public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        Object returnValue = method.invoke(target,args); //目标对象所有方法都要执行

        if(method.getName().equals("add") || method.getName().equals("update")|| method.getName().equals("delete"))
            new LogUtil().addLog(); //执行日志记录

        return returnValue;
    }
}